#!/bin/bash

# 整数的数学运算
# 将数学运算表达式放在 (()) 之间。
# *表达式可以有一个也可以有多个；
# *多个表达式之间以“,”号分隔；
# *多个表达式以最后一个表达式作为整个 (()) 命令的执行结果；
# *可以使用 $ 获取 (()) 命令的结果，这和使用 $ 获取变量值类似；
# *在 (()) 中使用变量无需加上$前缀，(()) 会自动解析变量名。
# 语法： ((表达式))
# 用法详解：
# ((a=10+66)
# ((b=a-15))
# ((c=a+b))	        这几种写法可以在计算完成后给变量赋值。以 ((b=a-15)) 为例，即将 a-15 的运算结果赋值给变量 c。【使用变量时不用加$前缀， (()) 会自动解析变量名】
# a=$((10+66)
# b=$((a-15))
# c=$((a+b))	      可以在 (()) 前面加上 $ 符号获取 (()) 命令的执行结果【即获取整个表达式的值】。以 c=$((a+b)) 为例，即将 a+b 这个表达式的运算结果赋值给变量 c。【c=((a+b)) 这样的写法是错误的，不加 $ 就不能取得表达式的结果】。
# ((a>7 && b==c))	  (()) 也可以进行逻辑运算，在 if 语句中常会使用逻辑运算。
# echo $((a+10))	  需要立即输出表达式的运算结果时，可以在 (()) 前面加 $ 符号。
# ((a=3+5, b=a+10))	对多个表达式同时进行计算。

# 数值计算
echo "1+1等于：$((1+1))" # 计算 1+1 的结果
i=5
((i=i*2))     # 也可以写成 ((i*=2))
echo "i经过计算后等于：$i"

# 综合算术运算
((a=1+2**3-4%3))
echo "a经过计算等于：$a"              # 写法一：把计算结果放在 (()) 里面的变量
b=$((1+2**3-4%3))
echo "b经过计算等于：$b"              # 写法二：运算后把结果赋值给变量【变量放在了括号外面】
echo "c经过计算等于：$((1+2**3-4%3))" # 写法三：直接将表达式的结果输出，注意不要丢掉 $ 符号

# 利用公式计算 1+2+3+4……+100 的和
c=$((100*(100+1)/2))
echo "方法一：获取1到100的数值和是：$c"
echo "方法二：获取1到100的数值和是：$((100*(100+1)/2))"

# 逻辑运算
# *逻辑运算中， 1 表示真， 0 表示假。
echo "3是不是小于8？：$((3<8))"
echo "3是不是大于8？：$((3>8))"
if((8>7&&5==5)) # 简单的 if 语句。【如果 8>7 成立，并且 5==5 成立，那么输出“是的，8大于7并且5等于5”】
then
echo "是的，8大于7并且5等于5"
fi

# 自增、自减运算
d=10
echo "$((d++))"                  # 如果 ++ 在 a 后面，那么在输出整个表达式时，会输出 a 的值,因为 a 为 10 ，所以表达式的值为 10
echo "执行表达式后 d 的结果是：$d" # 执行上面的表达式后，因为有 d++ ，因此 d 会自增 1 ，因此输出 d 的值为 11
e=100
echo "$((e--))"
echo "执行表达式后 e 的结果是：$e" # 执行上面的表达式后，因为有 e++ ，因此 e 会自增 1 ，因此输出 a 的值为 99
f=520
echo $((++f))                    # 如果 ++ 在 f 的前面，输出整个表达式是，先执行自增计算，所以输出 521
echo "执行表达式后 f 的结果是：$f" # 结果为 521
g=1111
echo $((--g))                    # 如果 -- 在 g 的前面，输出整个表达式是，先执行自减计算，所以输出 1110
echo "执行表达式后 g 的结果是：$g" # 结果为 1110

# 同时对多个表达式进行计算
# 执行顺序：现实计算第一个表达式再计算第二个表达式
((h=3+5, j=h+7))
echo "经过计算 h 的值是：$h , j 的值是：$j"
